/**
 * Created by xiang on 03/04/2017
 */
const extend = function (dest, source) {
  for (let obj in source) {
    if (source.hasOwnProperty(obj) && source[obj] !== null) {
      dest[obj] = source[obj];
    }
  }
  return dest;
};

const dateFormat = function (date, fmt = 'yyyy-MM-dd') {
  if (!(date instanceof Date)) {
    date = new Date(date);
  }
  let o = {
    "M+": date.getMonth() + 1,                 //月份
    "d+": date.getDate(),                    //日
    "h+": date.getHours(),                   //小时
    "m+": date.getMinutes(),                 //分
    "s+": date.getSeconds(),                 //秒
    "q+": Math.floor((date.getMonth() + 3) / 3), //季度
    "S": date.getMilliseconds()             //毫秒
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  }
  for (let k in o) {
    if (new RegExp("(" + k + ")").test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    }
  }
  return fmt;
};
/**
 * @return {string}
 */
Date.prototype.format = function (fmt = 'yyyy-MM-dd hh:mm:ss') { //author: meizz
  let o = {
    "M+": this.getMonth() + 1, //月份
    "d+": this.getDate(), //日
    "h+": this.getHours(), //小时
    "m+": this.getMinutes(), //分
    "s+": this.getSeconds(), //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    "S": this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (let k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
};

/**
 * 等待异步任务
 */
const waitAsync = function (ifFunc, callback) {
  let count = 0;
  let interval = setInterval(() => {
    if (ifFunc() || count > 100) {
      clearInterval(interval);
      callback();
    } else {
      count++;
    }
    console.log(count);
  }, 50);
};

export default {
  extend,
  dateFormat,
  waitAsync
}
